//////////////////////////////////////////////////////////////////////////
//
// GAM203
// DirectX Manager class
// DXMgr.h
// 
// Grant Johnson
// Qantm College
// 27/10/2010
//
//////////////////////////////////////////////////////////////////////////

#ifndef DXMGR_H
#define DXMGR_H

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "Singleton.h"
#include <d3dx9.h>
#include <d3d9.h>

#pragma comment(lib, "d3d9")
#pragma comment(lib, "d3dx9")

//Forward declarations
struct IDirect3D9;
struct IDirect3DDevice9;

class DXMgr : public Singleton<DXMgr>
{
public:
	DXMgr();
	virtual ~DXMgr();

	//////////////////////////////////////////////////////////////////////////
	// Setup Direct3D Device with set paramaters
	//
	// Paramaters:
	// a_hWnd, a Handle Window to setup Direct3D with
	//
	// Returns false if it failed to create the device
	// Returns true if it setup successfully
	//
	//////////////////////////////////////////////////////////////////////////
	bool Setup(HWND a_hWnd);

	//////////////////////////////////////////////////////////////////////////
	// Shutdown Direct3D - Releases the Direct3D device and	IDirect3D9 Interface
	//
	// Paramaters:
	// None
	//
	// Returns void
	//
	//////////////////////////////////////////////////////////////////////////
	void Shutdown();

	//////////////////////////////////////////////////////////////////////////
	// Get the IDirect3D9 Interface
	//
	// Paramaters:
	// None
	//
	// Returns a direct3d interface
	//
	//////////////////////////////////////////////////////////////////////////
	IDirect3D9* GetD3D() const;

	//////////////////////////////////////////////////////////////////////////
	// Get the Direct3D Device
	//
	// Paramaters:
	// None
	//
	// Returns the Direct3D device
	//
	//////////////////////////////////////////////////////////////////////////
	IDirect3DDevice9* GetDevice() const;

	void Resize();
	HWND GetParent() { return m_hParent; }

private:
	IDirect3D9* m_pD3D;
	IDirect3DDevice9* m_pDevice;

	D3DPRESENT_PARAMETERS m_presentParams;
	HWND m_hParent;
};

#endif //DXMGR_H